var mongodb_url = "mongodb://be5ff521-e0ce-4672-99c6-1c7e5c235422:25a17caa-acd1@192.168.1.19:27017/4cf95c0b-a10f-41fa-8b80-45a5696e991f";
//var mongodb_url = "mongodb://localhost:27017/lagougou";
var ObjectID = require('mongodb').ObjectID;
var mongodb = require('mongodb');

function Item(name, info, price, tags, imgpath) {
  this.name = name;
  this.info = info;
  this.price = price;
  this.tags = tags;
  this.imgpath = imgpath;
}

module.exports = Item;

//存储商品信息
Item.prototype.save = function(callback) {
  var date = new Date();
  //存储各种时间格式，方便以后扩展
  var time = {
      date: date,
      year : date.getFullYear(),
      month : date.getFullYear() + "-" + (date.getMonth() + 1),
      day : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
      minute : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + 
      date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) 
  }
  //要存入数据库的文档
  var item = {
      name: this.name,
      info: this.info,
      time: time,
      price: this.price,
      tags: this.tags,
      imgpath: this.imgpath,
      pv: 0
  };
  //打开数据库
  mongodb.open(function (err, db) {
    if (err) {
      return callback(err);
    }
    //读取 items 集合
    db.collection('items', function (err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      //将文档插入 items 集合
      collection.insert(item, {
        safe: true
      }, function (err) {
        mongodb.close();
        if (err) {
          return callback(err);//失败！返回 err
        }
        callback(null);//返回 err 为 null
      });
    });
  });
};

//一次获取十件商品
Item.getTen = function(name, page, callback) {
  //打开数据库
  mongodb.connect(mongodb_url, function (err, conn) {
    if (err) {
      return callback(err);
    }
    //读取 items 集合
    conn.collection('items', function (err, collection) {
      if (err) {
        conn.close();
        return callback(err);
      }
      var query = {};
      if (name) {
        query.name = name;
      }
      //使用 count 返回特定查询的文档数 total
      collection.count(query, function (err, total) {
        //根据 query 对象查询，并跳过前 (page-1)*10 个结果，返回之后的 10 个结果
        collection.find(query, {
          skip: (page - 1)*10,
          limit: 10
        }).sort({
          time: -1
        }).toArray(function (err, docs) {
          conn.close();
          if (err) {
            return callback(err);
          }
          callback(null, docs, total);
        });
      });
    });
  });
};

//获取一件商品
Item.getOne = function(id, callback) {
  //打开数据库
  mongodb.connect(mongodb_url, function (err, conn) {
    if (err) {
      return callback(err);
    }
    //读取 items 集合
    conn.collection('items', function (err, collection) {
      if (err) {
        conn.close();
        return callback(err);
      }
      //根据商品名进行查询
      collection.findOne({
        "_id": ObjectID(id)
      }, function (err, doc) {
        if (err) {
          conn.close();
          return callback(err);
        }
        if (doc) {
          //每访问 1 次，pv 值增加 1
          collection.update({
            "_id": ObjectID(id)
          }, {
            $inc: {"pv": 1}
          }, function (err) {
            conn.close();
            if (err) {
              return callback(err);
            }
          });
          
          callback(null, doc);//返回查询的一篇文章
        }
      });
    });
  });
};

//返回原始商品信息
Item.edit = function(id, callback) {

  //打开数据库
  mongodb.connect(mongodb_url, function (err, conn) {
    if (err) {
      return callback(err);
    }
    //读取 items 集合
    conn.collection('items', function (err, collection) {
      if (err) {
        conn.close();
        return callback(err);
      }
      //根据商品名进行查询
      collection.findOne({
        "_id": ObjectID(id)
      }, function (err, doc) {
        conn.close();
        if (err) {
          return callback(err);
        }
        callback(null, doc);//返回查询的一个商品信息
      });
    });
  });
};

//更新一个商品信息
Item.update = function(id, name, info, price, tags, imgpath, callback) {
  //打开数据库
  mongodb.connect(mongodb_url, function (err, conn) {

    if (err) {
      return callback(err);
    }
    //读取 items 集合
    conn.collection('items', function (err, collection) {
      if (err) {
        conn.close();
        return callback(err);
      }
      //更新商品内容
      collection.update({
        "_id": ObjectID(id)
      }, {
        $set: {
            "name": name,
            "info": info,
            "price": price,
            "tags": tags,
            "imgpath": imgpath}
      }, function (err) {
        conn.close();
        if (err) {
          return callback(err);
        }
        callback(null);
      });
    });
  });
};

//删除一个商品
Item.remove = function(id, callback) {
  //打开数据库
  mongodb.connect(mongodb_url, function (err, conn) {
    if (err) {
      return callback(err);
    }
    //读取 items 集合
    conn.collection('items', function (err, collection) {
      if (err) {
        conn.close();
        return callback(err);
      }
      //根据商品名称删除一个商品
      collection.remove({
        "_id": ObjectID(id)
      }, {
        w: 1
      }, function (err) {
        conn.close();
        if (err) {
          return callback(err);
        }
        callback(null);
      });
    });
  });
};

//返回含有特定标签的所有商品
Item.getTenTag = function(tag, page, callback) {
  mongodb.connect(mongodb_url, function (err, conn) {
    if (err) {
      return callback(err);
    }
    //读取 items 集合
    conn.collection('items', function (err, collection) {
      if (err) {
        conn.close();
        return callback(err);
      }
      var pattern = new RegExp("^.*" + tag + ".*$", "i");
      var query = {
        "tags": pattern
      };
      //使用 count 返回特定查询的商品数 total
      collection.count(query, function (err, total) {
        //根据 query 对象查询，并跳过前 (page-1)*10 个结果，返回之后的 10 个结果
        collection.find(query, {
          skip: (page - 1)*10,
          limit: 10
        }).sort({
          time: -1
        }).toArray(function (err, docs) {
          conn.close();
          if (err) {
            return callback(err);
          }
          callback(null, docs, total);
        });
      });
    });
  });
};

//返回通过商品名关键字查询的所有商品信息
Item.search = function(keyword, sortby, page, callback) {
  mongodb.connect(mongodb_url, function (err, conn) {
    if (err) {
      return callback(err);
    }
    conn.collection('items', function (err, collection) {
      if (err) {
        conn.close();
        return callback(err);
      }
      var pattern = new RegExp("^.*" + keyword + ".*$", "i");
      collection.count(function(err, total) {
        collection.find({
          "name": pattern
        }, {
          skip: (page - 1)*10,
          limit: 10
        }).sort({
          sortby: -1
        }).toArray(function (err, docs) {
          conn.close();
          if (err) {
           return callback(err);
          }
          callback(null, docs, total);
        });
      });
    });
  });
};